package com.sky.service;

import com.sky.dto.DishDTO;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.result.PageResult;
import com.sky.vo.DishVO;

import java.util.List;

/**
 * PROJECT_NAME: sky-take-out
 * NAME: DishService
 * USER: zhang
 * DATE: 2023/5/16
 * DESCRIPTION :
 */
public interface DishService {

    /**
     * 条件分页查询
     * @param dishPageQueryDTO 分页查询的条件(页码/分页条数/菜品名称/分类Id/菜品状态)
     * @return 全局通用返回信息Bean
     */
    PageResult selectByPage(DishPageQueryDTO dishPageQueryDTO);

    /**
     * 新增菜品信息(包含菜品口味)
     * @param dishDTO 用于接受菜品数据和菜品口味的Bean
     */
    void insertDish(DishDTO dishDTO);

    /**
     * 删除菜品信息
     * @param ids 要删除菜品信息的集合
     */
    void deleteDish(List<Long> ids);

    /**
     * 基于id查询菜品
     * @param dishId 要查询菜品的id
     * @return 菜品完整信息+口味
     */
    DishVO selectDishVOById(Long dishId);

    /**
     * 更新菜品信息
     * @param dishDTO 更新后的菜品完整信息Bean(▲包含菜品Id)
     * @return
     */
    void updateDish(DishDTO dishDTO);

    /**
     * 菜品的启售/停售
     */
    void modifyStatus(Dish dish);

    /**
     * 基于分类Id查询菜品信息集合
     *
     * @param categoryId 菜品分类Id
     * @return 分类Id对应的菜品信息的集合
     */
    List<Dish> getDishByCategoryId(Long categoryId);

    /**
     * 查询指定分类菜品和口味
     *
     * @param categoryId 菜品类别id
     */
    List<DishVO> selectDishAndFlavorByCategoryId(Long categoryId);
}
